package cn.org.wifit.core.service;

import java.io.Serializable;

import org.jboss.logging.Logger;

import cn.org.wifit.core.orm.IWifitDAO;

/**
 * 绑定了DAO层的抽象Abstarct服务层，
 * 抽象化的服务层并不会管数据层是使用的关系型数据库还是非关系型数据库。应该兼容两种类型的数据模型（RelationalAbstractEntity或者RepositoryAbstractEntity）
 * @author wenjie 
 * @param <T> 绑定的需要处理的实体类
 * @param <S> 绑定的匹配数据层
 */
public abstract class AbstractService <T , S extends IWifitDAO<T>> implements IWifitService<T> {
	
	protected final Logger logger = Logger.getLogger(getClass());
	
	/**
	 * 指定当前server所匹配的主要的DAO类
	 * @return
	 */
	protected abstract S getBaseDAO();
	
	/* (non-Javadoc)
	 * @see com.helome.springcore.service.IHelomeService#insert(com.helome.springcore.entity.AbstractEntity)
	 */
	public void insert(T entity) {
		this.getBaseDAO().insert((T)entity);
	}

	/* (non-Javadoc)
	 * @see com.helome.springcore.service.IHelomeService#update(com.helome.springcore.entity.AbstractEntity)
	 */
	public void update(T entity) {
		this.getBaseDAO().update((T)entity);
	}

	/* (non-Javadoc)
	 * @see com.helome.springcore.service.IHelomeService#getEntity(java.io.Serializable)
	 */
	public T getEntity(Serializable id) {
		return this.getBaseDAO().getEntity(id);
	}

	/* (non-Javadoc)
	 * @see com.helome.springcore.service.IHelomeService#delete(java.io.Serializable)
	 */
	public void delete(Serializable id) {
		this.getBaseDAO().delete(id);
	}
}
